Skip to content

feat: 템플릿 사용 기록 API (#79) - #80

Merged
oTAETAEo merged 3 commits into
developfrom
feat/79-template-usage
Nov 12, 2026
Merged

oTAETAEo merged 3 commits into
developfrom
feat/79-template-usage

Conversation

@oTAETAEo

@oTAETAEo oTAETAEo commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

관련 이슈

작업 내용

명세 14번 POST /api/v1/templates/{templateId}/usages. 클립보드 복사·삽입이 성공한 뒤 화면이 부르고, 템플릿의 최근 사용 시각(last_used_at)만 갱신합니다.

구분 내용
성공 TEMPLATE200_6 사용 기록이 저장되었습니다. result: templateId, lastUsedAt(+09:00)
채널 DASHBOARD_COPY / POPUP_COPY / EMAIL_INLINE. 없거나 틀리면 TEMPLATE400_9. 저장하지 않음
404 없는 ID·다른 회원(휴지통 포함) TEMPLATE404_1, 내 휴지통 TEMPLATE404_2 (getActiveTemplate 재사용)
시각 last_used_at·updated_at은 Clock 현재 시각, edited_at·목록 순서는 그대로
기타 사용 횟수 저장 안 함, 회원 잠금 안 함 (개수가 바뀌지 않음)
  • UsageChannel(template/entity): 저장하지 않는 값이라 쓰는 도메인의 entity에 뒀습니다. 상수 이름이 API 값입니다
  • @ValidUsageChannel(template/annotation): 요청 필드를 열거형으로 받으면 틀린 값이 JSON 역직렬화 실패(COMMON400_1)가 되므로, 문자열로 받아 여기서 검사합니다. 대소문자·앞뒤 공백은 고쳐 주지 않습니다
  • TemplateCommandService.recordUsage: 메서드에 @Transactional (feat: 휴지통 템플릿 복구 API (#67) #69 규칙)

잘못된 본문의 응답

본문 응답
{}, "channel": null, "", " ", 틀린 값, 소문자, 앞뒤 공백, "1" TEMPLATE400_9
JSON 숫자·불리언 (1, 0, true) TEMPLATE400_9 (잭슨이 문자열로 바꿈)
본문 없음, 깨진 JSON, null 본문, [], 채널이 배열·객체 COMMON400_1 (전역 처리 그대로)

채널이 틀리고 템플릿도 없으면 형식 검증이 먼저라 TEMPLATE400_9입니다.

테스트

  • 전체 1024개 통과
  • TemplateUsageControllerTest (통합): 성공 응답·no-store·+09:00·필드 순서, 세 채널, last_used_at·updated_at 갱신과 edited_at·created_at·이름·단축어·본문 유지, 두 번 기록하면 나중 시각, 목록 순서 유지, 위 표의 잘못된 본문, 404 네 경우, 숫자가 아닌 ID COMMON400_1, 토큰 없음 COMMON401_1
  • TemplateUsageDynamicUpdateTest: 조회 직후 별도 트랜잭션이 이름을 바꿔도 사용 기록이 되돌리지 않음. @DynamicUpdate를 빼면 이 테스트가 실패하는 것을 확인했습니다
  • TemplateCommandServiceTest(모키토), UsageChannelTest, ValidUsageChannelTest, TemplateErrorCodeTest

확인 체크리스트

  • ./gradlew build 통과
  • 테스트 포함
  • 변경 400줄 안팎 → 749줄 (본 코드 약 160줄, 테스트 약 590줄). 통합 테스트에 잘못된 값 사례가 많아서이고 기능은 나눌 수 없어 그대로 뒀습니다
  • 병합된 마이그레이션 수정 안 함
  • 비밀 값·개인정보 없음
  • global 공통 코드 변경 없음
  • 명세와 달라진 점 없음

리뷰어에게

  1. 엔티티를 읽고 markUsed로 씁니다 (@Modifying 아님). @DynamicUpdate(feat: 내 템플릿 수정 API (#52) #53) 덕분에 UPDATE에는 last_used_at과 감사 기능이 채우는 updated_at만 들어가 updated_at을 직접 넣지 않아도 되고, 기존 404 구분을 그대로 씁니다. 대신 본문 복호화에 실패하는 행은 500입니다. 이 API는 실패해도 화면이 알리지 않습니다
  2. 조회 뒤 커밋 전에 휴지통으로 옮겨지면 휴지통 행의 last_used_at이 바뀝니다. 표시하지 않는 값이고 복구하면 그대로 남는 정도라 허용했습니다 (서비스 주석)
  3. 같은 시각에 두 번 부르면 값이 같아 UPDATE가 나가지 않고 updated_at도 그대로입니다. 운영 시계가 마이크로초 단위라 실제로는 거의 없습니다
  4. 채널은 command로 넘기지 않습니다. 저장하지 않고 서비스가 쓰지 않아서입니다. 채널별 통계는 화면이 분석 도구 이벤트 template_used로 보냅니다
  5. 12번 삭제·13번 단축어 확인이 같은 TemplateController·TemplateSuccessCode를 이어서 건드립니다

🤖 Generated with Claude Code

@oTAETAEo oTAETAEo added feature 기능 개발 template 내 템플릿·휴지통 labels Nov 9, 2026
@oTAETAEo oTAETAEo self-assigned this Nov 9, 2026
@oTAETAEo
oTAETAEo marked this pull request as ready for review November 9, 2026 09:24

@chjpooh2002 chjpooh2002 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

딱히 크게 수정할 부분은 없는 거 같습니다! 수고하셨습니다~~

@oTAETAEo
oTAETAEo merged commit fd174a8 into develop Nov 12, 2026
1 check passed
@oTAETAEo
oTAETAEo deleted the feat/79-template-usage branch November 12, 2026 15:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature 기능 개발 template 내 템플릿·휴지통

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 템플릿 사용 기록 API

2 participants